---
title: "‎"
categories:
- devops
tags:
---

<div id="content">
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org8d4cc48">Basic Concept</a>
<ul>
<li><a href="#org0d5d0e6">操作对象</a>
<ul>
<li><a href="#orgf7b7fc4">pod :: 容器的集合，调度部署的基本单位</a></li>
<li><a href="#orga72b116">service :: pod的访问代理抽象</a></li>
<li><a href="#org4522b9e">replication controller :: pod的复制抽象</a></li>
</ul>
</li>
<li><a href="#org596314d">标签（ labels ） :: 标签是用来连接一组对象的，比如容器组。标签可以被用来组织和选择子对象</a></li>
<li><a href="#org8700935">节点（Node） :: 一个节点是一个运行 Kubernetes 中的主机。</a></li>
</ul>
</li>
<li><a href="#org6ee3200">核心组件</a>
<ul>
<li><a href="#org9941e9b">etcd :: 保存了整个集群的状态，所有状态的存储数据库</a></li>
<li><a href="#org496d501">master</a>
<ul>
<li><a href="#org924e018">apiserver :: 提供了资源操作的唯一入口，并提供认证、授权、访问控制、API 注册和发现等机制</a></li>
<li><a href="#org039bf69">controller manager :: 负责维护集群的状态，比如故障检测、自动扩展、滚动更新等</a></li>
<li><a href="#org137a506">scheduler 负责资源的调度，按照预定的调度策略将 Pod 调度到相应的机器上；</a></li>
</ul>
</li>
<li><a href="#org30ac6d3">slave ( working node ）</a>
<ul>
<li><a href="#orgc2021e2">kubelet 负责维护容器的生命周期，同时也负责 Volume（CVI）和网络（CNI）的管理；</a></li>
<li><a href="#org5f0132f">kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡；</a></li>
</ul>
</li>
<li><a href="#orgc36ae44">Container runtime 负责镜像管理以及 Pod 和容器的真正运行（CRI）；</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="outline-2" id="outline-container-org8d4cc48">
<h2 id="org8d4cc48">Basic Concept</h2>
<div class="outline-text-2" id="text-org8d4cc48">
</div>
<div class="outline-3" id="outline-container-org0d5d0e6">
<h3 id="org0d5d0e6">操作对象</h3>
<div class="outline-text-3" id="text-org0d5d0e6">
</div>
<div class="outline-4" id="outline-container-orgf7b7fc4">
<h4 id="orgf7b7fc4">pod :: 容器的集合，调度部署的基本单位</h4>
<div class="outline-text-4" id="text-orgf7b7fc4">
<p>
由若干容器组成的一个容器组，同个组内的容器共享一个存储卷(volume)
</p>
</div>
</div>
<div class="outline-4" id="outline-container-orga72b116">
<h4 id="orga72b116">service :: pod的访问代理抽象</h4>
</div>
<div class="outline-4" id="outline-container-org4522b9e">
<h4 id="org4522b9e">replication controller :: pod的复制抽象</h4>
<div class="outline-text-4" id="text-org4522b9e">
<p>
主要负责指定数量的 pod 在同一时间一起运行。
</p>
</div>
</div>
</div>
<div class="outline-3" id="outline-container-org596314d">
<h3 id="org596314d">标签（ labels ） :: 标签是用来连接一组对象的，比如容器组。标签可以被用来组织和选择子对象</h3>
</div>
<div class="outline-3" id="outline-container-org8700935">
<h3 id="org8700935">节点（Node） :: 一个节点是一个运行 Kubernetes 中的主机。</h3>
<div class="outline-text-3" id="text-org8700935">
<p>
节点并非 Kubernetes 创建，而是由云平台创建，或者就是物理机器、虚拟机。
在Kubernetes 中，节点仅仅是一条记录，节点创建之后，Kubernetes 会检查其是否可用。
在 Kubernetes 中，节点用如下结构保存：
</p>
<div class="org-src-container">
<pre class="src src-json">{
  "id": "10.1.2.3",
  "kind": "Minion",
  "apiVersion": "v1beta1",
  "resources": {
    "capacity": {
      "cpu": 1000,
      "memory": 1073741824
    },
  },
  "labels": {
    "name": "my-first-k8s-node",
  },
}
</pre>
</div>
<p>
<object class="org-svg" data="./.kubectl/node.svg" type="image/svg+xml">
Sorry, your browser does not support SVG.</object>
每一个kubernates node至少需要运行：
</p>
<dl class="org-dl">
<dt>Kubelet</dt><dd>用于在master和Node之间通信的进程，它管理运行于此机器上的pods和containers</dd>
<dt>container runtime</dt><dd>例如docker，rkt，负责从registry中拉取容器镜像，解压容器，运行应用。</dd>
</dl>
</div>
</div>
</div>
<div class="outline-2" id="outline-container-org6ee3200">
<h2 id="org6ee3200">核心组件</h2>
<div class="outline-text-2" id="text-org6ee3200">
</div>
<div class="outline-3" id="outline-container-org9941e9b">
<h3 id="org9941e9b">etcd :: 保存了整个集群的状态，所有状态的存储数据库</h3>
<div class="outline-text-3" id="text-org9941e9b">
<p>
即作为 <b>数据后端</b> ，又作为 <b>消息中间件</b>
组件自动的去侦测 Etcd 中的数值变化来获得通知，并且获得更新后的数据来执行相应的操作。
</p>
</div>
</div>
<div class="outline-3" id="outline-container-org496d501">
<h3 id="org496d501">master</h3>
<div class="outline-text-3" id="text-org496d501">
</div>
<div class="outline-4" id="outline-container-org924e018">
<h4 id="org924e018">apiserver :: 提供了资源操作的唯一入口，并提供认证、授权、访问控制、API 注册和发现等机制</h4>
<div class="outline-text-4" id="text-org924e018">
<p>
整个系统的对外接口，提供一套 RESTful 的 KubernetesAPI，供客户端和其它组件调
</p>
</div>
</div>
<div class="outline-4" id="outline-container-org039bf69">
<h4 id="org039bf69">controller manager :: 负责维护集群的状态，比如故障检测、自动扩展、滚动更新等</h4>
<div class="outline-text-4" id="text-org039bf69">
<ul class="org-ul">
<li>错误处理</li>
<li>容器扩容</li>
</ul>
</div>
<ul class="org-ul">
<li><a id="org570f6d0"></a>endpoint-controller :: 刷新服务和pod的关联信息<br/></li>
<li><a id="org0ed4dcd"></a>replication-controller :: 维护pod的复制为配置的数值<br/></li>
</ul>
</div>
<div class="outline-4" id="outline-container-org137a506">
<h4 id="org137a506">scheduler 负责资源的调度，按照预定的调度策略将 Pod 调度到相应的机器上；</h4>
</div>
</div>
<div class="outline-3" id="outline-container-org30ac6d3">
<h3 id="org30ac6d3">slave ( working node ）</h3>
<div class="outline-text-3" id="text-org30ac6d3">
</div>
<div class="outline-4" id="outline-container-orgc2021e2">
<h4 id="orgc2021e2">kubelet 负责维护容器的生命周期，同时也负责 Volume（CVI）和网络（CNI）的管理；</h4>
<div class="outline-text-4" id="text-orgc2021e2">
<ul class="org-ul">
<li>部署启动</li>
<li>运行监控</li>
</ul>
<p>
工作节点执行操作的 agent，负责具体的容器生命周期管理，根据从数据库中获取的信息来管理容器，并上报 pod 运行状态等
</p>
</div>
</div>
<div class="outline-4" id="outline-container-org5f0132f">
<h4 id="org5f0132f">kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡；</h4>
<div class="outline-text-4" id="text-org5f0132f">
<ul class="org-ul">
<li>服务发现</li>
</ul>
<p>
简单的网络访问代理，同时也是一个 Load Balancer。
负责将访问到某个服务的请求具体分配给工作节点上的 Pod（同一类标签）
</p>
</div>
</div>
</div>
<div class="outline-3" id="outline-container-orgc36ae44">
<h3 id="orgc36ae44">Container runtime 负责镜像管理以及 Pod 和容器的真正运行（CRI）；</h3>
</div>
</div>
</div>
<div class="status" id="postamble">
<p class="author">Author: amo</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
